iT邦幫忙

2022 iThome 鐵人賽

DAY 17
0
自我挑戰組

laravel+vue 學習系列 第 17

Day.17 網站後台建立之三 (與儲存與取回 Storage)

  • 分享至 

  • xImage
  •  

一、Laravel 儲存與取回

  • laravel 提供一些介面, 用來操作檔案上傳或讀取、Session 操作、Cookie 操作、第三方雲端儲存(s3)
  1. 設定檔 config/filesystem.php
    • 檔案內可設定不同磁碟的 dirver、跟目錄等選項, 類似 database 設定
    • 全域方法 storage_path() 可以指定目錄到 storage/ 目錄下
    • Astain 命令可以建立 public/storage 目錄到 storage/app/public
        php artisan storage:link
    
  2. 使用靜態介面設定要呼叫的磁碟
    // get() 屬於檔案系統的方法
    Storeage::disk('s3')->get('file.jpg');
* 增加額外的 Flysystem 提供者, 可以到 provider 內設定, 使用 Storeage::extend() 方法
* 基本檔案操作
```php
    // 使用者上傳檔案
    Storage::put(
        "product/{$product->id}",
        file_get_content($request->file('productImg')->getRealPath())
    );
    
    // 檔案下載
    public function downloadFile() {
        return Storage::download('product_001.pdf');
    }        
```
  1. session
    • 設定檔 config/session.php 內可以設定驅動程式、是否要加密、儲存方式(e.g. 檔案...)
        // e.g. 設定儲存位置 driver
        'driver' => env('SESSION_DRIVER', 'file'),
    
    • 存取 session
        // 使用全域函數
        session()->get('user_id');
    
        // 使用 request 物件
        $request->session()->get('user_id');
    
        // 自行注入 session 類別
        Route::get('user', funciton(Illuminate\Session\Store $session){
            return $session->get('user_id');
        });
    
    • 儲存 session
        // 將存取方法改為 put()
        // 第一個參數為鍵, 第二個參數為值
        session()->put('key', 'value');
    
    • 其他 session 方法
        // e.g. session 陣列處理
        session()->put('array', [1,2,3]);
        session()->push('array', 4);
    
        // e.g. 檢查是否有該 session key 是否有值
        session()->has('array');
    
        // 其他方法可參考官網
        // https://laravel.com/docs/9.x/session
    
  2. 存取快取
    • 存取方式
        // 靜態介面
        Cache::get('user');
    
        // 注入方式 
        public function getUser(Illuminate\Contracts\Cache\Respository $cache) {
            return $cache->get('user');
        });
    
        // 全域方法
        // Laravel 5.3 新增
        // 第一個參數為 key 值, 第二個參數為預設值
        $users = cache('key', 'default value');
    
        // 更多 Cache 可以參考官網
        // https://laravel.com/docs/9.x/cache#main-content
    
  3. cookie
    • cookie 會用到的地方主要有三個
      a. 使用者透過 cookie 傳入資訊
      b. 當處理完後可將需要的訊息儲存到 cookie 中, 回傳給使用者
      c. 將 cookie 方到 queue 中放到 CookieJar, 會被 AddQueuedCookiesToResopnse middleware 移除並加製回應物件中, 有額外風險當回傳過程中有被中斷 e.g. exit() 方法被呼叫時, CookieJar 內的 cookie 就不會被建立回傳到使用者
    • 存取 cookie
        // 靜態介面
        // 取得 cookie
        Cookie::get($key);
    
        // 檢查 cookie 是否存在
        Cookie::has($key);
    
        // 建立 Cookie
        Cookie::make(...params);
        // 回傳 cookie 實例
        Cookie::make();
    
        // 全域函示
        // 呼叫後會回傳一個 CookieJar 實例, 此時並不包含 get() 與 has() 方法
        cookie('user', '3', 30);
    
        // 請求中取得 cookie
        $request->cookie('user', '3');
    
        // 回傳時設定 cookie
        $cookie = cookie('user', '3');
        return Response::view('user.show')
                        ->cookie($cookie);
    

二、全站分類功能

  1. 資料表: pj_category、pj_relationship_category
  2. 路由:
    https://ithelp.ithome.com.tw/upload/images/20220922/20128127bxvaMoRa1i.png
  3. 主要功能:
    • 建立分類共兩層, 提供給前台選單製作、後台資料建立時做分類, 將關係儲存在 pj_relationship_category
    • 後台列表
      https://ithelp.ithome.com.tw/upload/images/20220922/20128127BEOmvBNUFp.png
    • 編輯頁面
      https://ithelp.ithome.com.tw/upload/images/20220922/20128127jnThCZ9Dzm.png

三、商品管理

  1. 資料表: pj_product、pj_image、pj_product_spec、pj_relationship_category
  2. 路由:
    https://ithelp.ithome.com.tw/upload/images/20220922/20128127bs5emQzfls.png
  3. 主要功能:
    • 建立商品資料 pj_product 為商品主資料表, pj_image 紀錄商品圖片, pj_product_spec 紀錄商品規格, pj_relationship_category 紀錄商品關係
    • 編輯頁面: 商品基本資料
      https://ithelp.ithome.com.tw/upload/images/20220922/20128127kuvEdbcCkW.png
    • 編輯頁面: 全站分類
      • 分類會抓取父階層分類, 當選擇後會更新子分類選項
        https://ithelp.ithome.com.tw/upload/images/20220922/20128127x8s32b2HgO.png
    • 編輯頁面: 規格
      • 規格分類會抓取父階層分類, 選取後會更新子階層
      • 其他欄位會儲存每個規格需要的資訊
        https://ithelp.ithome.com.tw/upload/images/20220922/201281273o3751Pmdf.png
    • 編輯頁面: 圖片上傳, 使用套件 fileond
      https://ithelp.ithome.com.tw/upload/images/20220922/20128127DLfBjvXErJ.png

github 進版
剩下的天繼續...


上一篇
Day.16 網站後台建立之二 (新增 Model 分類管理)
下一篇
Day18. 網站後台建立之四
系列文
laravel+vue 學習32
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言